<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // JavaScript 所有数字都保存成 64 位浮点数，这给数值的表示带来了两大限制。一是数值的精度只能到 53 个二进制位（相当于 16 个十进制位），大于这个范围的整数，JavaScript 是无法精确表示，这使得 JavaScript 不适合进行科学和金融方面的精确计算。二是大于或等于2的1024次方的数值，JavaScript 无法表示，会返回Infinity。

    // 解析: 浏览器中 javascript的数字也是以二进制的存储的  => 存在问题:
    // 1. 超出 2^53 的数 无法精确表示 (相当于 16 个十进制位)
    // 2. 超出 2^1024 的数 无法表示 => Infinity

    // var num = Math.pow(2, 53);
    // console.log(num);      // Math.pow(2, 53
    // console.log(num + 1);  // Math.pow(2, 53) + 1
    // console.log(num + 2);  // Math.pow(2, 53) + 2
    // console.log(num + 3);  // Math.pow(2, 53) + 3

    // ES6 新增 ** 运算符     m ** n => m^n
    // var num = 2 ** 53;
    // console.log(num);
    // console.log(num + 1);
    // console.log(num + 2);
    // console.log(num + 3);


    // var num = Math.pow(2, 1024);
    // console.log(num);







</script>

<script>
    // BigInt  ES6新增数据类型

    // ES2020 引入了一种新的数据类型 BigInt（大整数），来解决这个问题，这是 ECMAScript 的第八种数据类型。BigInt 只用来表示整数，没有位数的限制，任何位数的整数都可以精确表示。

    // 传统的数据类型
    // string  number  boolean  null undefined  object(array)

    // ES6新增数据类型
    // symbol  bigInt


    // 如何创建BigInt(大整数)
    // 1. 字面量创建  (快捷创建)
    var a = 2n;
    console.log(a, typeof a);  // 2n  'bigint'

    var b = 53n;
    console.log(b, typeof b);


    // 2. 通过向BigInt()中传入 整数->转化为bigInt (number转bigint)

    var a = BigInt(2);
    console.log(a, typeof a);  // 2n  'bigint'

    var b = BigInt(53);
    console.log(b, typeof b);



    // 注意: 大整数无法使用 Math.pow() 等一系列方法 =>   **
    // var num = Math.pow(a, b);
    // console.log(num);

    // 解决问题:
    // 1. 超出 2^53 的数 也能精确表示 (相当于 16 个十进制位)
    var num = a ** b;
    // console.log(num);
    // console.log(num + 1n);
    // console.log(num + 2n);
    // console.log(num + 3n);
    // console.log(num + 4n);

    // 2. 超出 2^1024 的数 也能精确表示
    var num = 2n ** 1024n;
    // console.log(num);
    // document.write(num);



    // bigInt 转 数字 (通过Number() 方法转化 )

    var a = 2n;

    console.log(Number(a));



</script>

</html>